「vba do while 配列」
という検索で、このサイト・インストラクターのネタ帳へのアクセスがありました。
VBA(Visual Basic for Applications)で配列を処理する際に、Do~Loop文の一種である、Do While文を使うコードについて探していた方による検索です。
既にデータの格納されている配列に何らかの処理を行う場合、Do~Loop文よりも、For~Next文のほうがシンプルに書けるケースが多いはずですが、プログラミング学習の一環として、あえてDo While文を書いてみるというのは、アリかもしれません。
Do Whileループで配列を処理するサンプルマクロ
以下のマクロを実行すると、配列変数・arrに格納された文字列「イ」「ロ」「ハ」が、メッセージボックスに順番に表示されます。
Dim arr As Variant
Dim i As Long
arr = Split("イ;ロ;ハ", ";")
i = LBound(arr)
Do While i <= UBound(arr)
MsgBox arr(i)
i = i + 1
Loop
配列のインデックス・添字の初期値を、LBound関数を使って変数・iに設定しておいてから、
i = LBound(arr)
変数・iがUBonde関数で返される値以下の間、Do~Loopを回しています。
Do While i <= UBound(arr)
Do~Loop文に慣れていない方の場合、
i = i + 1
という変数をインクリメントする処理を忘れがちです。
For~Nextループで配列を処理するサンプルマクロ
同じことをFor~Nextループを使って書くと以下のとおりです。
Dim arr As Variant
Dim i As Long
arr = Split("イ;ロ;ハ", ";")
For i = LBound(arr) To UBound(arr)
MsgBox arr(i)
Next i
Do Whileループで必要だった、
i = LBound(arr)
Do While i <= UBound(arr)
i = i + 1
という3行が、For~Nextループでは、
For i = LBound(arr) To UBound(arr)
の1行に、シンプルにまとめられているイメージです。
ループの条件を数値で表現できるならDo~LoopよりFor~Next
シンプルになっているので、Do Whileループよりも、For~Nextバグを生みにくいともいえます。
Do~Loop文に慣れていて、For~Next文に慣れていないプログラミング初心者の場合、必要のない、
i = i + 1
をうっかり書いてしまいがちです。
今回の記事でご紹介した配列に限らず、ループを回す前に何回ループを回せばいいのかがわかっているような場合、ループを回す条件を数値で表現できるのならば、Do~Loop文よりもFor~Next文のほうが、シンプルにバグを生みにくく書けるはずです。
Home » エクセルマクロ・Excel VBAの使い方 » 配列 » Do Whileループで配列を処理する